#include "VentanaPiso.h"
#include "PropiedadesNivel.h"
#include <gtkmm/messagedialog.h>

VentanaPiso::VentanaPiso(PropiedadesNivel *propNivel) {
	set_title("PISO");
	set_position(Gtk::WIN_POS_CENTER);
	set_resizable(false);
	set_border_width(10);
	set_keep_above(true);

	nivel = propNivel;
	vp_Grid = new Gtk::Grid;
	vp_Grid->set_row_spacing(10);
	vp_Grid->set_column_spacing(10);

	vp_Button_agregar.set_label("Agregar");
	vp_Button_agregar.signal_clicked().connect(sigc::mem_fun(*this,
			&VentanaPiso::on_button_agregar_clicked));

	vp_Button_terminar.set_label("Terminar");
	vp_Button_terminar.signal_clicked().connect(sigc::mem_fun(*this,
			&VentanaPiso::on_button_terminar_clicked));

	ajuste_posX = Gtk::Adjustment::create(0, 0, nivel->getMaxAnchura());
	vp_SpinButton_posX.set_adjustment(ajuste_posX);
	vp_SpinButton_posX.set_numeric();
	vp_SpinButton_posX.set_alignment(Gtk::ALIGN_CENTER);
	vp_SpinButton_posX.set_update_policy(Gtk::UPDATE_IF_VALID);

	ajuste_posY = Gtk::Adjustment::create(0, 0, nivel->getMaxAltura());
	vp_SpinButton_posY.set_adjustment(ajuste_posY);
	vp_SpinButton_posY.set_numeric();
	vp_SpinButton_posY.set_alignment(Gtk::ALIGN_CENTER);
	vp_SpinButton_posY.set_update_policy(Gtk::UPDATE_IF_VALID);

	Gtk::Label *etiqueta;

	etiqueta = Gtk::manage(
			new Gtk::Label("GENERADOR DE PISO", Gtk::ALIGN_CENTER));
	vp_Grid->attach(*etiqueta, 0, 0, 4, 1);

	etiqueta = Gtk::manage(
			new Gtk::Label("Defina una coordenada por donde pasará el piso:",
			Gtk::ALIGN_START));
	vp_Grid->attach(*etiqueta, 0, 1, 4, 1);

	etiqueta = Gtk::manage(
			new Gtk::Label("Coord. X", Gtk::ALIGN_CENTER));
	vp_Grid->attach(*etiqueta, 0, 2, 1, 1);
	vp_Grid->attach_next_to(vp_SpinButton_posX, *etiqueta,
			Gtk::POS_RIGHT, 1, 1);

	etiqueta = Gtk::manage(
			new Gtk::Label("Coord. Y", Gtk::ALIGN_CENTER));
	vp_Grid->attach(*etiqueta, 2, 2, 1, 1);
	vp_Grid->attach_next_to(vp_SpinButton_posY, *etiqueta, 
			Gtk::POS_RIGHT, 1, 1);

	vp_Grid->attach(vp_Button_terminar, 0, 8, 2, 1);
	vp_Grid->attach(vp_Button_agregar, 2, 8, 2, 1);
	add(*vp_Grid);
	piso = new Piso;
	show_all_children();
}

void VentanaPiso::resetear() {
	set_position(Gtk::WIN_POS_CENTER);
	ajuste_posX->set_value(0);
	ajuste_posY->set_value(0);
	ajuste_posX->set_upper(nivel->getMaxAnchura());
	ajuste_posY->set_upper(nivel->getMaxAltura());
	piso = new Piso;
}

void VentanaPiso::on_button_agregar_clicked() {
	unsigned posX = vp_SpinButton_posX.get_value_as_int();
	unsigned posY = vp_SpinButton_posY.get_value_as_int();

	Posicion *posicion = new Posicion(posX, posY);
	piso->addPunto(posicion);

	Gtk::MessageDialog dialogo(*this, "PUNTO AGREGADO");
	dialogo.run();
}

void VentanaPiso::on_button_terminar_clicked() {
	if (piso->getVectorPosiciones().size() < 2) {
		Gtk::MessageDialog dialogo(*this, "ERROR AL DEFINIR EL PISO");
		dialogo.set_secondary_text(
				"Debe definir al menos 2 puntos para el piso!!");
		dialogo.run();
	}
	else {
		nivel->agregarPiso(piso);
		hide();
	}
}

VentanaPiso::~VentanaPiso() {
	delete vp_Grid;
}